package aceim.app.screen.pano;
import static aceim.app.utils.linq.KindaLinq.from;
import java.util.ArrayList;
import java.util.List;
import aceim.app.MainActivity;
import aceim.app.R;
import aceim.app.screen.Screen;
import aceim.app.utils.linq.KindaLinq;
import aceim.app.utils.linq.KindaLinqRule;
import aceim.app.view.page.Page;
import aceim.app.view.page.contactlist.ContactList;
import aceim.app.view.page.other.Splash;
import aceim.app.widgets.HorizontalListView;
import aceim.app.widgets.bottombar.BottomBarButton;
import android.annotation.SuppressLint;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewConfiguration;
public class PanoScreen extends Screen {
private final HorizontalListView mList;
private final BottomBarButton mMenuButton;
private final PanoPageAdapter mPageAdapter;
private Page mSelectedPage;
private final List<Page> mPages = new ArrayList<Page>();
private final OnHierarchyChangeListener mTabChangedListener = new OnHierarchyChangeListener() {
@Override
public void onChildViewRemoved(View parent, View child) {}
@Override
public void onChildViewAdded(View parent, View child) {
setSelectedPage((Page) child.getTag());
}
};
public PanoScreen(MainActivity activity) {
super(activity);
LayoutInflater.from(activity).inflate(R.layout.screen_pano, this);
mList = (HorizontalListView) findViewById(R.id.horizontal_list);
mList.setOnHierarchyChangeListener(mTabChangedListener);
mMenuButton = (BottomBarButton) findViewById(R.id.menu_button);
mMenuButton.setOnClickListener(mMenuButtonClickListener);
mMenuButton.setOnLongClickListener(mMenuButtonLongClickListener);
mPageAdapter = new PanoPageAdapter(activity, mTabClickListener, mPages);
mPageAdapter.setNotifyOnChange(true);
int width = activity.getResources().getDisplayMetrics().widthPixels;
int height = activity.getResources().getDisplayMetrics().heightPixels;
int pageWidth = (int) (0.8 * (width < height ? width : height));
mPageAdapter.setPageWidth(pageWidth);
mList.setAdapter(mPageAdapter);
}
@Override
public void addPage(Page page, boolean setAsCurrent) {
page.setMainActivity(getActivity());
mPageAdapter.add(page);
if (setAsCurrent) {
setSelectedPage(page);
}
}
@SuppressLint("NewApi")
private void setMenuButtonAvailability() {
mMenuButton.setVisibility(
Build.VERSION.SDK_INT <= 10 || (Build.VERSION.SDK_INT >= 14 && ViewConfiguration.get(getContext()).hasPermanentMenuKey()) ?
View.GONE :
View.VISIBLE);
}
@Override
public Page findPage(final String pageId) {
return from(mPages).where(new KindaLinqRule<Page>() {
@Override
public boolean match(Page t) {
return t.getPageId().equals(pageId);
}
}).first();
}
@Override
public void onPageChanged(String pageId) {}
@Override
public void setSelectedPage(String pageId) {
Page page = findPage(pageId);
setSelectedPage(page);
if (!(page instanceof Splash) && page.hasMenu()) {
setMenuButtonAvailability();
} else {
mMenuButton.setVisibility(View.GONE);
}
}
@Override
public List<Page> findPagesByRule(KindaLinqRule<Page> rule) {
return KindaLinq.from(mPages).where(rule).all();
}
@Override
public Page getSelectedPage() {
return mSelectedPage;
}
@Override
public Page getSelectedContactList() {
return (mSelectedPage instanceof ContactList) ? mSelectedPage : null;
}
@Override
public void removePage(Page page) {
mPageAdapter.remove(page);
if (mPages.size() > 0) {
setSelectedPage(mPages.get(0).getPageId());
} else {
getActivity().exitApplication();
}
}
@Override
public void updateTabWidget(Page p) {
View tab = mList.findViewWithTag(p);
if (tab == null) {
return;
}
View tabWidget = tab.findViewById(R.id.indicator);
mPageAdapter.fillWithImageAndTitle(tabWidget, p);
}
@Override
public List<Page> getAllPages() {
return mPages;
}
@Override
public void storeScreenSpecificData(Bundle bundle) {}
@Override
public void recoverScreenSpecificData(Bundle bundle) {}
private void setSelectedPage(Page page) {
this.mSelectedPage = page;
mList.setSelected(page);
}
}